/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ASAInst;

import exception.DivisionByZeroException;
import exception.VariableNonDeclareeException;
import generation.GestionVariables;
import java.util.List;

/**
 *
 * @author FM & KB
 */
public class ASAInstFonction extends ASAInst {

    private String nomFonction;
    private List<String> nomsParametres;
    private ASAInstBloc corpsFonction;

    //Declaration
    public ASAInstFonction(String nomFonction, ASAInstBloc listeInstructions, List<String> nomsParametres) {
        this.nomFonction = nomFonction;
        this.corpsFonction = listeInstructions;
        this.nomsParametres = nomsParametres;
    }

    public String getNomFonction() {
        return this.nomFonction;
    }

    public List<String> getNomsParametres() {
        return this.nomsParametres;
    }

    public ASAInstBloc getListeInstructions() {
        return this.corpsFonction;
    }

    @Override
    public void executer() throws VariableNonDeclareeException, DivisionByZeroException{
        if (this.corpsFonction != null) {
            this.corpsFonction.executer();
        }
    }

    @Override
    public String notationExplorateur(String prefixe) {
        String res = prefixe + getLabelExplorateur() + nomFonction + "\n";
        String prefixeSuiv = prefixe + "   ";
        for (String nomParam : nomsParametres) {
            res += prefixeSuiv + nomParam;
        }
        return res;
    }

    @Override
    public String getLabelExplorateur() {
        return "FONCTION";
    }
}
